﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using vensoft.Entities;


namespace vensoft.DataAccess
{
    public class ConsultarUsuarioDataAccess:MasterDataAcess, IConsultarUsuarioDataAccess
    {
        public List<Usuario> ConsultarUsuario(string nusuario, string password)
        {
            SqlCommand commando = base.CreateSelectCommand("ConsultarUsuario");
            commando.Parameters.AddWithValue("@nomb_usuario", nusuario);
            commando.Parameters.AddWithValue("@password", password);
            return SelectObjectFactory(commando);
        }

        private List<Usuario> SelectObjectFactory(SqlCommand commando)
        {
            List<Usuario> lista = new List<Usuario>();

            using (SqlDataReader reader = base.ExecuteReader(commando))
            {
                while (reader.Read())
                {
                    Usuario usuario = new Usuario()
                    {
                        Cod_Personal = reader.GetInt32(0),
                        Nomb_Usuario = reader.GetString(1),
                        Password = reader.GetString(2),
                        Cargo = reader.GetString(3),
                        DNI = reader.GetString(4),
                        Nombre_Pers = reader.GetString(5)
                    };

                    lista.Add(usuario);
                }
            }

            return lista;
        }

        public List<Usuario> GetAllFromUsuario()
        {
            SqlCommand commando = base.CreateSelectCommand("GetAllFromUsuarios");
            return SelectObjectFactory(commando);
        }
        
        public List<Usuario> GetAllFromUsuarioByNombre(string nombre)
        {
            SqlCommand commando = base.CreateSelectCommand("GetAllFromUsuariosByNombre");
            commando.Parameters.AddWithValue("nombre", nombre);     
            return SelectObjectFactory(commando);
        }
        
        public void EliminarUsuario(int cod_usuario)
        {
            SqlCommand command = base.CreateCommand("EliminarUsuario");
            base.AddInParameter(command, "cod_pers", cod_usuario);
            base.ExecuteCommand(command);
        }
        
        public List<Usuario> ValidarUsuario(string nusuario)
        {
            SqlCommand commando = base.CreateSelectCommand("ValidarUsuario");
            commando.Parameters.AddWithValue("nomb_usuario", nusuario);
            return SelectObjectFactory(commando);
        }
        
        public void RegistrarUsuario(Personal personal, Usuario usuario)
        {
            SqlCommand command = base.CreateCommand("RegistrarEditarUsuario");
            AddParametersp(personal, usuario, command);
        }

        private void AddParametersp(Personal personal, Usuario usuario, SqlCommand command)
        {
            base.AddInParameter(command, "Cod_Personal", personal.Cod_Personal);
            base.AddInParameter(command, "Nomb_Usuario", usuario.Nomb_Usuario);
            base.AddInParameter(command, "Password ", usuario.Password);
            base.AddInParameter(command, "Cargo ", personal.cargo);
            base.AddInParameter(command, "DNI", personal.dni);
            base.AddInParameter(command, "Nombre_Personal", personal.nombre); 

            base.ExecuteCommand(command);
        }
    }
}
